package com.scott.ch072;

/**
 * @author 黄后林
 * @version 1.0
 * @note  线性表中的 单向链表
 * @date 2022-03-21 11:20:40
 */
public class LinkList<T> {

    //节点类
    private class Node{
        //data=数据域=用来存储节点真正保存的数据
        T data;

        //next=指针域=用来存储下一个节点是谁
        Node next;

        public Node(T data,Node next){
            this.data=data;
            this.next=next;

        }
    }

    //头节点
    private Node head;

    //链表的长度
    private int counter;

    public LinkList(){

        //1、初始化头节点  初始化的时候头节点不存数据 且只有头节点1个节点 所以它的下一个节点为null
        this.head=new Node(null,null);

        //2、初始化元素个数 开始的时候只有头节点 没有其他实际有数据的节点  所以节点个数为0
        this.counter=0;
    }

    //清空链表
    public void clear(){
        this.head.next=null;
        this.counter=0;
    }

    //获取链表的长度
    public int length(){
        return this.counter;
    }

    //判断链表是否为空
    public boolean isEmpty(){

        if(this.counter ==0){
            return true;
        }
        return false;
    }

    //获取第5个节点的值 num=5
    public T get(int num){
        //头节点指向的元素=第1个节点、第1个节点指向的元素=第2个节点
        //通过循环 从头节点开始找 找5次
        Node ist=head.next;
        for(int index=0;index<num;index++){
            if(null == ist){
                break;
            }
            ist=ist.next;
        }
        return ist.data;
    }

    //向链表中添加元素
    public void insert(T t){

    }

    //向链表中中下标为index的位置添加元素
    public void insert(int index,T t){

    }

    //删除下标为index的元素
    public T remove(int index){
        return null;
    }

    //查找元素t第一次在链表中出现的位置
    public T indexOf(T t){
        return null;
    }


}
